#ifndef HPLC_SPARKLINK_AUTOSAMPLER_SENDPACKET_H
#define HPLC_SPARKLINK_AUTOSAMPLER_SENDPACKET_H

#include "basesendpacket.h"

namespace hplc
{
namespace sparklink
{

class HplcSparkLinkAutoSamplerProtocolData;
class HplcSparkLinkAutoSamplerSendPacket : public BaseSendPacket
{
public:
    HplcSparkLinkAutoSamplerSendPacket(HplcSparkLinkAutoSamplerProtocolData &data, QObject *parent = nullptr);
    virtual ~HplcSparkLinkAutoSamplerSendPacket() override;

    // 100
    void P_analysisTime(quint8 hour, quint8 minute, quint8 second);
    void SP_analysisTime();
    void SA_analysisTime();

    // 107
    void P_loopVolume(quint16 volume);
    void SP_loopVolume();

    // 如果plateNumber == 3, 则columnNumber必须为0
    // 108
    void P_firstSamplePosition(quint8 plateNumber, quint8 columnNumber, quint8 rowNumber);
    void SP_firstSamplePosition();
    // 109
    void P_lastSamplePosition(quint8 plateNumber, quint8 columnNumber, quint8 rowNumber);
    void SP_lastSamplePosition();

    // 111
    void P_flushVolume(quint16 volume);
    void SP_flushVolume();

    // 112
    void P_numberOfInjectionsOrSample(quint8 number);
    void SP_numberOfInjectionsOrSample();
    void SA_numberOfInjectionsOrSample();

    // 124
    void P_injectionMode(quint8 mode);
    void SP_injectionMode();

    // 125
    void P_syringeVolume(quint16 volume);
    void SP_syringeVolume();

    // 126
    void P_tubingVolume(quint16 volume);
    void SP_tubingVolume();

    // 128
    void P_firstTransportVial(quint8 plateNumber, quint16 number);
    void SP_firstTransportVial();
    // 129
    void P_lastTransportVial(quint8 plateNumber, quint16 number);
    void SP_lastTransportVial();

    // 130
    void P_sampleNeedleHeight(quint8 level);
    void SP_sampleNeedleHeight();

    // 131
    void P_syringeSpeed(quint8 level);
    void SP_syringeSpeed();

    // 132
    void P_syringeSpeedScaleFactor(quint8 factor);
    void SP_syringeSpeedScaleFactor();

    // 134
    void P_bufferVolume(quint16 volume);
    void SP_bufferVolume();

    // 150
    void SA_actualSampleNumber();

    // 152
    void SA_status();

    // 155
    void SA_errorCode();
    // 156
    void C_resetErrorCode(quint8 flag);

    // 192
    void P_airSegment(quint8 isUsed);
    void SP_airSegment();

    // 193
    void P_skipMissingSamplePosition(quint8 flag);
    void SP_skipMissingSamplePosition();

    // 194
    void P_headSpacePressure(quint8 flag);
    void SP_headSpacePressure();

    // 195
    void P_resetOutputAfterSerials(quint8 flag);
    void SP_resetOutputAfterSerials();

    // 198
    void P_usePrepMode(quint8 flag);
    void SP_usePrepMode();

    // 200
    void P_traySegmentSettings(quint8 leftTrayType, quint8 rightTrayType,
                               quint8 leftType, quint8 rightType);
    void P_traySegmentSettings_SinglePlate(quint8 type);
    void SP_traySegmentSettings();

    // 208
    void P_syncCondition(quint8 syncWithNextInjection, quint8 syncWithLoad,
                         quint8 syncWithInject, quint8 syncWithValveWash);
    void SP_syncCondition();

    // 210
    void P_injectionVolume(quint16 volume);
    void SP_injectionVolume();

    // 500
    void P_washBetween(quint8 between);
    void SP_washBetween();

    // 501
    void P_washTimes(quint8 steps, quint8 times);
    void SP_washTimes(quint8 steps);

    // 502
    void P_washSyringeValveSolventPort(quint8 step, quint8 port);
    void SP_washSyringeValveSolventPort(quint8 step);

    // 505
    void P_fillTransportPositionTimes(quint8 port, quint8 times);
    void SP_fillTransportPositionTimes();

    // 507
    void P_washVolume(quint8 step, quint16 volume);
    void SP_washVolume(quint8 step);

    // 540
    void P_useInMethod(quint8 usedTimedEvents, quint8 usedMix);
    void SP_useInMethod();

    // 2509
    void P_serialNumber(quint32 serial);
    void SP_serialNumber();

    // 4005
    void P_clearMixOrUserProg(quint8 flag);

    // 4008
    void P_clearMethod(quint8 flag);

    // 5100
    void C_startOrStop_01(quint8 startUserProgram, quint8 start);
    void C_startOrStop_02();

    // 5101
    void C_holdOrContinue(quint8 isHold);

    // 5111
    void C_searchSamplePosition(quint8 plateNumber, quint16 platePosition);

    // 5130
    void C_initialWash(quint8 port, quint8 isStart);

    // 5140
    void C_moveSyringe(quint8 position);

    // 5300
    void SA_doorSensor();
};

} // sparklink
} // hplc

#endif // HPLC_SPARKLINK_AUTOSAMPLER_SENDPACKET_H
